#ifndef _GUI_APPLICATION_LINUX_
#define _GUI_APPLICATION_LINUX_

#include <gtkmm.h>
#include "../GUI.h"
#include "Core/Memory/HeapObject.h"
#include "Core/GUI/Application/IApplication.h"

class Window;

class Application : public IApplication, public HeapObject
{
public:
	Application(int argc, char *argv[]);
	virtual ~Application();
	GUI_LINUX virtual IWindow * CreateWindow(const std::string & _strName, uint32 _iWidth, uint32 _iHeight);
	GUI_LINUX virtual void DestroyWindow(IWindow * _pWindow);
	GUI_LINUX virtual IButton * CreateButton(const std::string & _strName);
	GUI_LINUX virtual void DestroyButton(IButton * _pButton);
	GUI_LINUX virtual IVerticalLayout * CreateVerticalLayout();
	GUI_LINUX virtual void DestroyVerticalLayout(IVerticalLayout * _pVerticalLayout);
	GUI_LINUX virtual IHorizontalLayout * CreateHorizontalLayout();
	GUI_LINUX virtual void DestroyHorizontalLayout(IHorizontalLayout * _pHorizontalLayout);
	/*GUI_LINUX virtual IBoxLayout * CreateBoxLayout();
	GUI_LINUX virtual void DestroyBoxLayout(IBoxLayout * _pBoxLayout);*/
private:
	std::vector<Window*> m_WindowList;
	Gtk::Main m_kit;
};

#endif // _GUI_APPLICATION_LINUX_